package com.ruoyi.business.service;

import java.io.IOException;
import java.util.Date;
import java.util.List;
import com.ruoyi.business.domain.PressureFlowData;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.business.vo.AirPressureGroupVO;
import com.ruoyi.business.vo.ExperimentTimeRangeVO;
import com.ruoyi.common.core.domain.AjaxResult;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;

/**
 * 压力流量数据Service接口
 * 
 * @author qiancheng
 * @date 2025-09-16
 */
public interface IPressureFlowDataService extends IService<PressureFlowData>
{
    /**
     * 查询压力流量数据
     * 
     * @param id 压力流量数据主键
     * @return 压力流量数据
     */
    public PressureFlowData selectPressureFlowDataById(Long id);

    /**
     * 查询压力流量数据列表
     * 
     * @param pressureFlowData 压力流量数据
     * @return 压力流量数据集合
     */
    public List<PressureFlowData> selectPressureFlowDataList(PressureFlowData pressureFlowData);

    /**
     * 新增压力流量数据
     * 
     * @param pressureFlowData 压力流量数据
     * @return 结果
     */
    public int insertPressureFlowData(PressureFlowData pressureFlowData);

    /**
     * 修改压力流量数据
     * 
     * @param pressureFlowData 压力流量数据
     * @return 结果
     */
    public int updatePressureFlowData(PressureFlowData pressureFlowData);

    /**
     * 批量删除压力流量数据
     * 
     * @param ids 需要删除的压力流量数据主键集合
     * @return 结果
     */
    public int deletePressureFlowDataByIds(Long[] ids);

    /**
     * 删除压力流量数据信息
     * 
     * @param id 压力流量数据主键
     * @return 结果
     */
    public int deletePressureFlowDataById(Long id);

    /**
     * 下载压力流量 Excel 模板
     * @param response HttpServletResponse
     * @throws IOException
     */
    void downloadTemplate(HttpServletResponse response) throws IOException;

    /**
     * 导入压力流量数据
     *
     * @param file Excel 文件
     * @param importTime 导入时间，由前端传入
     * @return 导入结果信息
     * @throws Exception 解析或保存异常
     */
    AjaxResult importPressureFlowData(MultipartFile file, Date importTime,String startTime,String endTime) throws Exception;

    /**
     * 获取已导入数据的导入时间列表
     *
     * @return 导入时间列表（按升序）
     */
    List<String> getImportTimeList();

    /**
     * 获取某个导入日的实验时间范围
     *
     * @param importDay 导入时间
     * @return 实验时间范围列表
     */
    List<ExperimentTimeRangeVO> getPressureFlowTimeRanges(Date importDay);


    /**
     * 获取按气压分组的图表数据（核心接口）
     * 从Service层实现分组逻辑，不依赖XML的resultMap
     * @return 气压分组VO列表
     */
//    List<AirPressureGroupVO> getChartDataGroupedByAirPressure(Date importTime);


    /**
     * 获取按气压分组的图表数据（核心接口）
     * @param importTime
     * @param startTime
     * @param endTime
     * @return
     */
    List<AirPressureGroupVO> getChartDataGroupedByAirPressure(Date importTime, String startTime, String endTime);
}
